home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-10-15 | 2.3 KB | 120 lines | [TEXT/PJMM] |
- UNIT MyShapes;
- {***********************************}
- INTERFACE
-
- USES
- MemTypes, QuickDraw, OSIntf, ToolIntf, PackIntf, MacPrint, ObjIntf, GlobalStuff, MyDialogs;
-
- TYPE
- TShape = OBJECT(TObject)
- fPt: Point;
- oDialog: TDialog;
- PROCEDURE Create (vPt: Point);
- PROCEDURE Free;
- override;
- END;
-
- TOvals = OBJECT(TShape)
- PROCEDURE Create (vPt: Point);
- override;
- END;
-
- TSpirals = OBJECT(TShape)
- PROCEDURE Create (vPt: Point);
- override;
- END;
-
- {***********************************}
- IMPLEMENTATION
-
- PROCEDURE TShape.Create (vPt: Point);
- BEGIN
- END; {Create}
-
- {----------------------------------------}
- PROCEDURE TShape.Free;
- BEGIN
- IF oDialog <> NIL THEN
- oDialog.Free;
- INHERITED Free;
- END; {Free}
-
- {========================================}
- PROCEDURE TOvals.Create (vPt: Point);
- VAR
- vItem: Integer;
- i: Integer;
- vRect: Rect;
- vMax: LongInt;
- vHSize, vVSize: LongInt;
- vHDelta, vVDelta: LongInt;
-
- BEGIN
- MoveTo(vPt.h, vPt.v);
- WITH oDialog DO
- BEGIN
- StringToNum(fStr[1], vMax);
- StringToNum(fStr[2], vHSize);
- StringToNum(fStr[3], vVSize);
- StringToNum(fStr[4], vHDelta);
- StringToNum(fStr[5], vVDelta);
- END;
- vItem := oDialog.fPopItem;
-
- WITH vPt DO
- SetRect(vRect, h - vHSize, v - vVSize, h + vHSize, v + vVSize);
- IF vMax > 0 THEN
- FOR i := 1 TO vMax DO
- BEGIN
- CASE vItem OF
- kFrameOval:
- FrameOval(vRect);
- kInvertOval:
- InvertOval(vRect);
- kFrameRect:
- FrameRect(vRect);
- kInvertRect:
- InvertRect(vRect);
- OTHERWISE
- END;
- InsetRect(vRect, vHDelta, vVDelta);
- END;
- END; {Create}
-
- {========================================}
- PROCEDURE TSpirals.Create (vPt: Point);
- VAR
- i, j: Integer;
- x, y, z: LongInt;
- dH, dV, dX: LongInt;
- vMax: LongInt;
-
- BEGIN
- MoveTo(vPt.h, vPt.v);
- WITH oDialog DO
- BEGIN
- StringToNum(fStr[1], dH);
- StringToNum(fStr[2], dV);
- StringToNum(fStr[3], vMax);
- END;
- x := 0;
- y := 1;
- z := -1;
- IF vMax > 0 THEN
- REPEAT
- x := x + 1;
- IF odd(x) THEN
- y := -y;
- IF odd(x + 1) THEN
- z := -z;
- dV := dV * y * z;
- dH := dH * z * y;
- Line(dH, dV);
- dX := dH + 2 * y;
- dH := dV + 2 * z;
- dV := dX;
- UNTIL x = vMax;
- END; {Create}
-
- END. {unit MyShapes}
- {***********************************}